using System;
using System.Collections.Generic;
using System.Text;
using App.Modelo;
using System.Diagnostics;

namespace App.Controlador
{
    public class ControladoraEquipos : ControladoraBase
    {
        public Equipo seleccionar( string nroSerie ) 
        {
            return Repositorio.Get<Equipo>("NroSerie", nroSerie);
        }

        public Equipo seleccionar(int idEquipo)
        {
            return Repositorio.GetById<Equipo>(idEquipo);
        }

        public void alta(Equipo equipo)
        {
            // hago unas validaciones
            if (equipo.NroSerie == "" )
                throw new Exception("El equipo debe tener un Numero de Serie");
            if (equipo.ModeloEquipo == null)
                throw new Exception("El equipo debe tener un Modelo");
            if (equipo.Propietario == null)
                throw new Exception("El equipo debe tener un propietario");

            Repositorio.SaveObject(equipo);
        }
        
        public void modificar(Equipo equipo)
        {
            // hago unas validaciones
            Repositorio.SaveObject(equipo);
        }

        public IList<Equipo> buscar(Cliente Cliente)
        {
            return Repositorio.GetList<Equipo>("Propietario", Cliente);

        }

        public IList<Equipo> buscar(string Marca, string Modelo, string NroSerie, string NombreCliente )
        {
            IDictionary<string, string> param = new Dictionary<string, string>();

            string where = "";

            if (Marca != "") 
            {
                where += "(equipo.ModeloEquipo.Marca.Descripcion like :marca)";
                param.Add( "marca", Marca);
            }
            if (Modelo != "")
            {
                if (where != "")
                    where += " AND ";
                where += "equipo.ModeloEquipo.Descripcion like :modelo";
                param.Add("modelo", Modelo);
            }
            if (NroSerie != "")
            {
                if (where != "")
                    where += " AND ";
                where += "equipo.NroSerie like :nroSerie";
                param.Add("nroSerie", NroSerie);
            }
            if (NombreCliente != "")
            {
                if (where != "")
                    where += " AND ";
                where += "(equipo.Propietario.RazonSocial like :nombreCliente " 
                    + "OR equipo.Propietario.NombreFantasia like :nombreCliente)";
                param.Add("nombreCliente", NombreCliente);
            }

            if (where != "")
                where = "WHERE " + where;

            string hql = "from Equipo as equipo " + where;
            
            return Repositorio.GetList<Equipo>(hql, param);
        }
        public IList<Equipo> buscar(string Marca, string Modelo, string NroSerie, Cliente Cliente)
        {
            IDictionary<string, object> param = new Dictionary<string, object>();

            string where = "";

            if (Marca != "")
            {
                where += "(equipo.ModeloEquipo.Marca.Descripcion like :marca)";
                param.Add("marca", Marca);
            }
            if (Modelo != "")
            {
                if (where != "")
                    where += " AND ";
                where += "equipo.ModeloEquipo.Descripcion like :modelo";
                param.Add("modelo", Modelo);
            }
            if (NroSerie != "")
            {
                if (where != "")
                    where += " AND ";
                where += "equipo.NroSerie like :nroSerie";
                param.Add("nroSerie", NroSerie);
            }
            if (Cliente != null)
            {
                if (where != "")
                    where += " AND ";
                where += "(equipo.Propietario = :cliente )";
                    
                param.Add("cliente", Cliente);
            }

            if (where != "")
                where = "WHERE " + where;

            string hql = "from Equipo as equipo " + where;

            return Repositorio.GetList<Equipo>(hql, param);
        }        
        public IList<Equipo> buscar()
        {
            return Repositorio.GetList<Equipo>("from Equipo");
        }
            
    }
}
